package tech.aistar.design.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 本类用来演示: 动态代理的方式
 *
 * @author: success
 * @date: 2021/3/25 2:20 下午
 */
public class OrderDaoHandler implements InvocationHandler{

    private Object obj;

    public OrderDaoHandler(Object obj){
        this.obj = obj;
    }

    /**
     *
     * @param proxy
     * @param method 代理对象正在访问的目标方法对应的反射的实例Method
     * @param args
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("[日志]之前...");

//        if(method.getName().equals("add")){
//            throw new RuntimeException("sorry,不支持!");
//        }

        //反射调用方法...
        Object result =  method.invoke(obj,args);

        System.out.println("[日志]之后...");
        return result;
    }
}
